package com.utils;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import static java.util.Calendar.*;

/**
 * Created by yangziqiang on 16-9-21.
 */
public class TimesUtils {
    /*public static void main(String[] args) throws ParseException, ParseException {
        DateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d=new Date();
        String str=format.format(d);
       // System.out.println(str);
        Date d2=format.parse(str);
       // System.out.println(d2);
        /////////////////得到想要测试的时间整天
        int dayMis=1000*60*60*24;//一天的毫秒-1
       // System.out.println("一天的毫秒-1:"+dayMis);
        //返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
        long curMillisecond=d2.getTime();//当天的毫秒
       // System.out.println("curMillisecond:"+new Date(curMillisecond));
        long resultMis=curMillisecond+(dayMis-1); //当天最后一秒
        System.out.println("resultMis:"+resultMis);
        DateFormat format2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //得到我需要的时间    当天最后一秒
        Date resultDate=new Date(resultMis);
        System.out.println("resultDate:"+resultDate);
       // System.out.println("FormatResult:"+format2.format(resultDate));
    }*/

    /**
     * 传入天的最后一秒
     * @param date
     * @return
     * @throws ParseException
     */
    public Date getDaylastTime(Date date) throws ParseException {
        DateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d=date;
        String str=format.format(d);
        //System.out.println(str);
        Date d2=format.parse(str);
        //System.out.println(d2);
        /////////////////得到想要测试的时间整天
        int dayMis=1000*60*60*24;//一天的毫秒-1
        //System.out.println("一天的毫秒-1:"+dayMis);
        //返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
        long curMillisecond=d2.getTime();//当天的毫秒
        //System.out.println("curMillisecond:"+new Date(curMillisecond));
        long resultMis=curMillisecond+(dayMis-1); //当天最后一秒
       // System.out.println("resultMis:"+resultMis);
        DateFormat format2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //得到我需要的时间    当天最后一秒
        Date resultDate=new Date(resultMis);
        //System.out.println("resultDate:"+resultDate);
        //System.out.println("FormatResult:"+ format2.format(resultDate));
        return resultDate;
    }

    /**
     * 返回这一天的最早的时候
     *
     * @param date
     * @return
     */
    public static Date getEarliest(Date date) {
        return parseTime(date, 0, 0, 0, 0);
    }

    /**
     * 返回这一天的最晚时候
     *
     * @param date
     * @return
     */
    public static Date getLastest(Date date) {
        return parseTime(date, 23, 59, 59, 999);
    }
    public static Date parseTime(Date date, int hourOfDay, int minute,
                                 int second, int milliSecond) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        setCalendarTime(cal, hourOfDay, minute, second, milliSecond);
        return cal.getTime();
    }
    private static void setCalendarTime(Calendar cal, int hourOfDay,
                                        int minute, int second, int milliSecond) {
        cal.set(HOUR_OF_DAY, hourOfDay);
        cal.set(MINUTE, minute);
        cal.set(SECOND, second);
        cal.set(MILLISECOND, milliSecond);
    }

}
